/*

*/
var Request = (function(option){
	var inst;
	var req = (function(option){ 
	});
	var create = function(option){
　　		inst = new req(option);
     	return inst;
	}
	//请求的基础路径，如http://localhost:8080/mysuject
	var baseURL = Config.baseURL;
	var fileCount = 0, uploadFileCount = 0;//表单上文件数，已上传成功数量
	
	req.prototype.get = function(paras){
		/*
		paras.element;//触发事件的元素，用于显示loading动画
		paras.loadType; //load类型，不填或者0遮罩loading，1按钮loading(需要element元素不为空)，其它值不显示loading
		paras.url;//请求的url，--->>>必填
		paras.parameters;//请求参数
		paras.callback;//回调函数
		paras.delay;//是否延迟执行,默认true
		paras.showPageId;//显示返回结果的元素id，为空时，结果不显示到界面上
		paras.pushState;//boolean型，是否加入历史栈，默认不加
		*/
		console.log('getRequest paras:',paras);
		paras.method = 'get';
		inst.baseRequest(paras);
	}
	
	req.prototype.post = function(paras){
		console.log('postRequest paras:',paras);
		paras.method = 'post';
		inst.baseRequest(paras);
	}

	req.prototype.baseRequest = function(paras){
		var url = paras.url;//请求的url，--->>>必填
		var method = paras.method;
		var delay = paras.delay==false?0:500;//是否延迟执行,默认true
		var pushState = paras.pushState;//是否加入历史栈，默认不加
		var callback = paras.callback;//回调函数
		
		console.log('baseRequest paras:',paras);
		
		axios.request( {
			url: baseURL + url,
			method: method
		})
		.then(function (res) {
			if(!!callback && typeof callback == "function"){
				callback(res);
			}
			if(pushState==true){
				history.pushState('#'+ url, '', '#'+ url);
			}
		});
	}
	
	//异步表单提交
	//参数：提交地址，表单id。如果提交地址参数为空时，默认提交到表单的action地址
	//返回结果：提交地址执行后返回的内容（json数据或者html代码，看自己需要决定）
	//延迟执行时,显示按钮loading。非延迟执行显示界面loading
	req.prototype.formSubmit = function(paras){
		var vueObj = paras.vueObj;
		var formRefName = paras.formRefName;
		var element = paras.element;//显示loading动画的按钮 vue实例对象；按钮需要绑定v-bind:disabled和v-bind:style属性
		var loadingContent = paras.loadingContent;//显示loading动画内容的data变量名
		var loadType = paras.loadType; //load类型，0遮罩loading，1按钮loading(需要element元素不为空)，其它值不显示loading
		var actionURL = paras.url;//请求的url
		var formid=paras.formid;//要提交的表单id
		var formAddParas = paras.formAddParas;//追加的额外参数
		var callback = paras.callback;//回调函数
		var delay = paras.delay==false?0:500;//是否延迟执行,默认true
		var showPageId = paras.showPageId;//显示返回结果的元素id，showPageId为空时不显示操作结果
		var toTop = paras.toTop;//true or false：加载页面后，是否定位到顶部;默认定位到顶部，只有false才不动
		var layindex = 0;
		var loadIndex = '';
		
		//提交动画
		if(loadType == 0){
			loadIndex = sysLoad();
		}else if(loadType == 1 && !!element && !!loadingContent){
			element[loadingContent] = '<i id="submit_loading" style="font-size:26px;vertical-align:bottom;" class="layui-icon layui-icon-loading layui-anim layui-anim-rotate layui-anim-loop"></i>';
			element['disabled'] = true;
			var style = element['style'];
			style = (!style?'':style) + 'pointer-events:none';
			element['style'] = style;
		}
		//隐藏提交动画
		var hideLoading = function(){
			if(loadType == 1 && !!element && !!loadingContent){
				element[loadingContent] = '';
				element['disabled'] = false;
				var style = element['style'];
				style = (!style?'':style).replace('pointer-events:none','') ;
				element['style'] = style;
			}
		}
		//表单提交的方法
		var submit = function(){
			var form = vueObj.$refs[formRefName];
			var fd = null;
			
			if(!actionURL){
				actionURL = form.attributes.action.value;
			}
			if(!actionURL){
				actionURL = location.hash.substring(1); // url缺少时，取当前地址
			}
			//去掉type=text输入框的前后空格,vue中暂无找到相关统一去空格的方法，先这样
			var inputTagElements = form.getElementsByTagName('input');
			for (var i = 0; i < inputTagElements.length; i++) {
				if( inputTagElements[i].type = 'text' && !!inputTagElements[i].value){
					inputTagElements[i].value = inputTagElements[i].value.replace(/^\s+|\s+$/gm,'');
				}
			}
			if(!!form){
				fd = new FormData(form);
				//添加追加的参数
				if(!!formAddParas){
					for(var key in formAddParas){
						fd.set(key,formAddParas[key]);
					}
				}
			}else{
				fd = new FormData();
			}
			//延迟执行0.5秒
			setTimeout(function () { 
				axios.request({
					method: 'post', //default value : get
					url: baseURL + actionURL,
					data:fd,
					responseType: 'json', // default
				}).then(function (res) {
					console.log('formSubmit 请求完成，actionURL:',baseURL + actionURL);
					hideLoading();
					if(typeof callback == "function"){
						callback(res);
					}
				}).catch(function (err) {
					hideLoading();
					console.warn('formSubmit 请求异常:',err);
				});
				
			}, delay);
		}
		submit();
	}
	

	
	return {create: create};
})().create({});
